﻿using System;
using XSTDZ.ERP.Application.DataContracts;
using System.Collections.Generic;

namespace XSTDZ.ERP.Application
{
    /// <summary>
    /// 盘点服务
    /// </summary>
    public interface IProductCheckService
    {
        #region 盘点订单
        /// <summary>
        /// 添加盘点任务单据
        /// </summary>
        /// <param name="productCheckBillDto"></param>
        Guid AddProductCheckBill(ProductCheckBillDto productCheckBillDto);
        /// <summary>
        /// 添加盘点任务单据
        /// </summary>
        /// <param name="productCheckBillDto"></param>
        Guid AddProductCheckBill(ProductCheckBillDto productCheckBillDto, IEnumerable<ProductCheckBillDetailDto> productCheckBillDetailDtos);
        /// <summary>
        /// 添加盘点任务单据
        /// </summary>
        /// <param name="productCheckBillDto"></param>
        Guid AddProductCheckBill(Guid productCheckBillId, IEnumerable<ProductCheckBillDetailDto> productCheckBillDetailDtos);
        void UpdateProductCheckBill(ProductCheckBillDto productCheckBillDto);
        void UpdateProductCheckBill(Guid productCheckBillId, IEnumerable<ProductCheckBillDetailDto> productCheckBillDetailDtos);
        void UpdateProductCheckBill(ProductCheckBillDto productCheckBillDto, IEnumerable<ProductCheckBillDetailDto> productCheckBillDetailDtos);

        void ConvertProductCheckBillDeleteState(Guid productCheckBillId);
        void ConvertProductCheckBillDeleteState(Guid productCheckBillId, IEnumerable<Guid> productCheckBillDetailIds);

        ProductCheckBillDto GetProductCheckBill(Guid productCheckBillId);
        IEnumerable<ProductCheckBillDto> GetProductCheckBills(int pageIndex, int pageSize);

        //把生成的盘点单数据更新至库存，会影响库存
        void UpdateToStock(Guid productCheckBillId, IEnumerable<Guid> productCheckBillDetailIds);
        #endregion
        #region 盘点订单明细
        void AddProductCheckBillDetail(Guid productInBillId, ProductCheckBillDetailDto productCheckBillDetailDto);
        void UpdateProductCheckBillDetail(Guid productInBillId, IEnumerable<ProductCheckBillDetailDto> productCheckBillDetailDtos);
        ProductCheckBillDetailDto GetProductCheckBillDetail(Guid productCheckBillDetailId);
        IEnumerable<ProductCheckBillDetailDto> GetProductCheckBillDetails(Guid productCheckBillId);

        #endregion
        #region 其它
        /// <summary>
        /// 获得当前盘点单单号的最大单号
        /// </summary>
        /// <returns></returns>
        string GetMaxBillNo();
        void Confirm(Guid billId, string profitAndLossNo);
        #endregion
    }
}
